// Knockout JavaScript library v2.2.1
// (c) Steven Sanderson - http://knockoutjs.com/
// License: MIT (http://www.opensource.org/licenses/mit-license.php)

(function() {
	function j(w) {
		throw w;
	}
	var m = !0,
		p = null,
		r = !1;

	function u(w) {
		return function() {
			return w
		}
	};
	var x = window,
		y = document,
		ga = navigator,
		F = window.jQuery,
		I = void 0;

	function L(w) {
		function ha(a, d, c, e, f) {
			var g = [];
			a = b.j(function() {
				var a = d(c, f) || [];
				0 < g.length && (b.a.Ya(M(g), a), e && b.r.K(e, p, [c, a, f]));
				g.splice(0, g.length);
				b.a.P(g, a)
			}, p, {
				W: a,
				Ka: function() {
					return 0 == g.length || !b.a.X(g[0])
				}
			});
			return {
				M: g,
				j: a.pa() ? a : I
			}
		}

		function M(a) {
			for (; a.length && !b.a.X(a[0]);) a.splice(0, 1);
			if (1 < a.length) {
				for (var d = a[0], c = a[a.length - 1], e = [d]; d !== c;) {
					d = d.nextSibling;
					if (!d) return;
					e.push(d)
				}
				Array.prototype.splice.apply(a, [0, a.length].concat(e))
			}
			return a
		}

		function S(a, b, c, e, f) {
			var g = Math.min,
				h = Math.max,
				k = [],
				l, n = a.length,
				q, s = b.length,
				v = s - n || 1,
				G = n + s + 1,
				J, A, z;
			for (l = 0; l <= n; l++) {
				A = J;
				k.push(J = []);
				z = g(s, l + v);
				for (q = h(0, l - 1); q <= z; q++) J[q] = q ? l ? a[l - 1] === b[q - 1] ? A[q - 1] : g(A[q] || G, J[q - 1] || G) + 1 : q + 1 : l + 1
			}
			g = [];
			h = [];
			v = [];
			l = n;
			for (q = s; l || q;) s = k[l][q] - 1, q && s === k[l][q - 1] ? h.push(g[g.length] = {
				status: c,
				value: b[--q],
				index: q
			}) : l && s === k[l - 1][q] ? v.push(g[g.length] = {
				status: e,
				value: a[--l],
				index: l
			}) : (g.push({
				status: "retained",
				value: b[--q]
			}), --l);
			if (h.length && v.length) {
				a = 10 * n;
				var t;
				for (b = c = 0;
				(f || b < a) && (t = h[c]); c++) {
					for (e = 0; k = v[e]; e++) if (t.value === k.value) {
						t.moved = k.index;
						k.moved = t.index;
						v.splice(e, 1);
						b = e = 0;
						break
					}
					b += e
				}
			}
			return g.reverse()
		}

		function T(a, d, c, e, f) {
			f = f || {};
			var g = a && N(a),
				g = g && g.ownerDocument,
				h = f.templateEngine || O;
			b.za.vb(c, h, g);
			c = h.renderTemplate(c, e, f, g);
			("number" != typeof c.length || 0 < c.length && "number" != typeof c[0].nodeType) && j(Error("Template engine must return an array of DOM nodes"));
			g = r;
			switch (d) {
				case "replaceChildren":
					b.e.N(a, c);
					g = m;
					break;
				case "replaceNode":
					b.a.Ya(a, c);
					g = m;
					break;
				case "ignoreTargetNode":
					break;
				default:
					j(Error("Unknown renderMode: " + d))
			}
			g && (U(c, e), f.afterRender && b.r.K(f.afterRender, p, [c, e.$data]));
			return c
		}

		function N(a) {
			return a.nodeType ? a : 0 < a.length ? a[0] : p
		}

		function U(a, d) {
			if (a.length) {
				var c = a[0],
					e = a[a.length - 1];
				V(c, e, function(a) {
					b.Da(d, a)
				});
				V(c, e, function(a) {
					b.s.ib(a, [d])
				})
			}
		}

		function V(a, d, c) {
			var e;
			for (d = b.e.nextSibling(d); a && (e = a) !== d;) a = b.e.nextSibling(e), (1 === e.nodeType || 8 === e.nodeType) && c(e)
		}

		function W(a, d, c) {
			a = b.g.aa(a);
			for (var e = b.g.Q, f = 0; f < a.length; f++) {
				var g = a[f].key;
				if (e.hasOwnProperty(g)) {
					var h = e[g];
					"function" === typeof h ? (g = h(a[f].value)) && j(Error(g)) : h || j(Error("This template engine does not support the '" + g + "' binding within its templates"))
				}
			}
			a = "ko.__tr_ambtns(function($context,$element){return(function(){return{ " + b.g.ba(a) + " } })()})";
			return c.createJavaScriptEvaluatorBlock(a) + d
		}

		function X(a, d, c, e) {
			function f(a) {
				return function() {
					return k[a]
				}
			}

			function g() {
				return k
			}
			var h = 0,
				k, l;
			b.j(function() {
				var n = c && c instanceof b.z ? c : new b.z(b.a.d(c)),
					q = n.$data;
				e && b.eb(a, n);
				if (k = ("function" == typeof d ? d(n, a) : d) || b.J.instance.getBindings(a, n)) {
					if (0 === h) {
						h = 1;
						for (var s in k) {
							var v = b.c[s];
							v && 8 === a.nodeType && !b.e.I[s] && j(Error("The binding '" + s + "' cannot be used with virtual elements"));
							if (v && "function" == typeof v.init && (v = (0, v.init)(a, f(s), g, q, n)) && v.controlsDescendantBindings) l !== I && j(Error("Multiple bindings (" + l + " and " + s + ") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.")), l = s
						}
						h = 2
					}
					if (2 === h) for (s in k)(v = b.c[s]) && "function" == typeof v.update && (0, v.update)(a, f(s), g, q, n)
				}
			}, p, {
				W: a
			});
			return {
				Nb: l === I
			}
		}

		function Y(a, d, c) {
			var e = m,
				f = 1 === d.nodeType;
			f && b.e.Ta(d);
			if (f && c || b.J.instance.nodeHasBindings(d)) e = X(d, p, a, c).Nb;
			e && Z(a, d, !f)
		}

		function Z(a, d, c) {
			for (var e = b.e.firstChild(d); d = e;) e = b.e.nextSibling(d), Y(a, d, c)
		}

		function $(a, b) {
			var c = aa(a, b);
			return c ? 0 < c.length ? c[c.length - 1].nextSibling : a.nextSibling : p
		}

		function aa(a, b) {
			for (var c = a, e = 1, f = []; c = c.nextSibling;) {
				if (H(c) && (e--, 0 === e)) return f;
				f.push(c);
				B(c) && e++
			}
			b || j(Error("Cannot find closing comment tag to match: " + a.nodeValue));
			return p
		}

		function H(a) {
			return 8 == a.nodeType && (K ? a.text : a.nodeValue).match(ia)
		}

		function B(a) {
			return 8 == a.nodeType && (K ? a.text : a.nodeValue).match(ja)
		}

		function P(a, b) {
			for (var c = p; a != c;) c = a, a = a.replace(ka, function(a, c) {
				return b[c]
			});
			return a
		}

		function la() {
			var a = [],
				d = [];
			this.save = function(c, e) {
				var f = b.a.i(a, c);
				0 <= f ? d[f] = e : (a.push(c), d.push(e))
			};
			this.get = function(c) {
				c = b.a.i(a, c);
				return 0 <= c ? d[c] : I
			}
		}

		function ba(a, b, c) {
			function e(e) {
				var g = b(a[e]);
				switch (typeof g) {
					case "boolean":
					case "number":
					case "string":
					case "function":
						f[e] = g;
						break;
					case "object":
					case "undefined":
						var h = c.get(g);
						f[e] = h !== I ? h : ba(g, b, c)
				}
			}
			c = c || new la;
			a = b(a);
			if (!("object" == typeof a && a !== p && a !== I && !(a instanceof Date))) return a;
			var f = a instanceof Array ? [] : {};
			c.save(a, f);
			var g = a;
			if (g instanceof Array) {
				for (var h = 0; h < g.length; h++) e(h);
				"function" == typeof g.toJSON && e("toJSON")
			} else for (h in g) e(h);
			return f
		}

		function ca(a, d) {
			if (a) if (8 == a.nodeType) {
				var c = b.s.Ua(a.nodeValue);
				c != p && d.push({
					sb: a,
					Fb: c
				})
			} else if (1 == a.nodeType) for (var c = 0, e = a.childNodes, f = e.length; c < f; c++) ca(e[c],
			d)
		}

		function Q(a, d, c, e) {
			b.c[a] = {
				init: function(a) {
					b.a.f.set(a, da, {});
					return {
						controlsDescendantBindings: m
					}
				},
				update: function(a, g, h, k, l) {
					h = b.a.f.get(a, da);
					g = b.a.d(g());
					k = !c !== !g;
					var n = !h.Za;
					if (n || d || k !== h.qb) n && (h.Za = b.a.Ia(b.e.childNodes(a), m)), k ? (n || b.e.N(a, b.a.Ia(h.Za)), b.Ea(e ? e(l, g) : l, a)) : b.e.Y(a), h.qb = k
				}
			};
			b.g.Q[a] = r;
			b.e.I[a] = m
		}

		function ea(a, d, c) {
			c && d !== b.k.q(a) && b.k.T(a, d);
			d !== b.k.q(a) && b.r.K(b.a.Ba, p, [a, "change"])
		}
		var b = "undefined" !== typeof w ? w : {};
		b.b = function(a, d) {
			for (var c = a.split("."), e = b, f = 0; f < c.length - 1; f++) e = e[c[f]];
			e[c[c.length - 1]] = d
		};
		b.p = function(a, b, c) {
			a[b] = c
		};
		b.version = "2.2.1";
		b.b("version", b.version);
		b.a = new function() {
			function a(a, d) {
				if ("input" !== b.a.u(a) || !a.type || "click" != d.toLowerCase()) return r;
				var c = a.type;
				return "checkbox" == c || "radio" == c
			}
			var d = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
				c = {}, e = {};
			c[/Firefox\/2/i.test(ga.userAgent) ? "KeyboardEvent" : "UIEvents"] = ["keyup", "keydown", "keypress"];
			c.MouseEvents = "click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");
			for (var f in c) {
				var g = c[f];
				if (g.length) for (var h = 0, k = g.length; h < k; h++) e[g[h]] = f
			}
			var l = {
				propertychange: m
			}, n, c = 3;
			f = y.createElement("div");
			for (g = f.getElementsByTagName("i"); f.innerHTML = "\x3c!--[if gt IE " + ++c + "]><i></i><![endif]--\x3e", g[0];);
			n = 4 < c ? c : I;
			return {
				Na: ["authenticity_token", /^__RequestVerificationToken(_.*)?$/],
				o: function(a, b) {
					for (var d = 0, c = a.length; d < c; d++) b(a[d])
				},
				i: function(a, b) {
					if ("function" == typeof Array.prototype.indexOf) return Array.prototype.indexOf.call(a, b);
					for (var d = 0, c = a.length; d < c; d++) if (a[d] === b) return d;
					return -1
				},
				lb: function(a, b, d) {
					for (var c = 0, e = a.length; c < e; c++) if (b.call(d, a[c])) return a[c];
					return p
				},
				ga: function(a, d) {
					var c = b.a.i(a, d);
					0 <= c && a.splice(c, 1)
				},
				Ga: function(a) {
					a = a || [];
					for (var d = [], c = 0, e = a.length; c < e; c++) 0 > b.a.i(d, a[c]) && d.push(a[c]);
					return d
				},
				V: function(a, b) {
					a = a || [];
					for (var d = [], c = 0, e = a.length; c < e; c++) d.push(b(a[c]));
					return d
				},
				fa: function(a, b) {
					a = a || [];
					for (var d = [], c = 0, e = a.length; c < e; c++) b(a[c]) && d.push(a[c]);
					return d
				},
				P: function(a, b) {
					if (b instanceof Array) a.push.apply(a,
					b);
					else for (var d = 0, c = b.length; d < c; d++) a.push(b[d]);
					return a
				},
				extend: function(a, b) {
					if (b) for (var d in b) b.hasOwnProperty(d) && (a[d] = b[d]);
					return a
				},
				ka: function(a) {
					for (; a.firstChild;) b.removeNode(a.firstChild)
				},
				Hb: function(a) {
					a = b.a.L(a);
					for (var d = y.createElement("div"), c = 0, e = a.length; c < e; c++) d.appendChild(b.A(a[c]));
					return d
				},
				Ia: function(a, d) {
					for (var c = 0, e = a.length, g = []; c < e; c++) {
						var f = a[c].cloneNode(m);
						g.push(d ? b.A(f) : f)
					}
					return g
				},
				N: function(a, d) {
					b.a.ka(a);
					if (d) for (var c = 0, e = d.length; c < e; c++) a.appendChild(d[c])
				},
				Ya: function(a, d) {
					var c = a.nodeType ? [a] : a;
					if (0 < c.length) {
						for (var e = c[0], g = e.parentNode, f = 0, h = d.length; f < h; f++) g.insertBefore(d[f], e);
						f = 0;
						for (h = c.length; f < h; f++) b.removeNode(c[f])
					}
				},
				bb: function(a, b) {
					7 > n ? a.setAttribute("selected", b) : a.selected = b
				},
				D: function(a) {
					return (a || "").replace(d, "")
				},
				Rb: function(a, d) {
					for (var c = [], e = (a || "").split(d), f = 0, g = e.length; f < g; f++) {
						var h = b.a.D(e[f]);
						"" !== h && c.push(h)
					}
					return c
				},
				Ob: function(a, b) {
					a = a || "";
					return b.length > a.length ? r : a.substring(0, b.length) === b
				},
				tb: function(a, b) {
					if (b.compareDocumentPosition) return 16 == (b.compareDocumentPosition(a) & 16);
					for (; a != p;) {
						if (a == b) return m;
						a = a.parentNode
					}
					return r
				},
				X: function(a) {
					return b.a.tb(a, a.ownerDocument)
				},
				u: function(a) {
					return a && a.tagName && a.tagName.toLowerCase()
				},
				n: function(b, d, c) {
					var e = n && l[d];
					if (!e && "undefined" != typeof F) {
						if (a(b, d)) {
							var f = c;
							c = function(a, b) {
								var d = this.checked;
								b && (this.checked = b.nb !== m);
								f.call(this, a);
								this.checked = d
							}
						}
						F(b).bind(d, c)
					} else !e && "function" == typeof b.addEventListener ? b.addEventListener(d, c, r) : "undefined" != typeof b.attachEvent ? b.attachEvent("on" + d, function(a) {
						c.call(b, a)
					}) : j(Error("Browser doesn't support addEventListener or attachEvent"))
				},
				Ba: function(b, d) {
					(!b || !b.nodeType) && j(Error("element must be a DOM node when calling triggerEvent"));
					if ("undefined" != typeof F) {
						var c = [];
						a(b, d) && c.push({
							nb: b.checked
						});
						F(b).trigger(d, c)
					} else "function" == typeof y.createEvent ? "function" == typeof b.dispatchEvent ? (c = y.createEvent(e[d] || "HTMLEvents"), c.initEvent(d, m, m, x, 0, 0, 0, 0, 0, r, r, r, r, 0, b), b.dispatchEvent(c)) : j(Error("The supplied element doesn't support dispatchEvent")) :
						"undefined" != typeof b.fireEvent ? (a(b, d) && (b.checked = b.checked !== m), b.fireEvent("on" + d)) : j(Error("Browser doesn't support triggering events"))
				},
				d: function(a) {
					return b.$(a) ? a() : a
				},
				ua: function(a) {
					return b.$(a) ? a.t() : a
				},
				da: function(a, d, c) {
					if (d) {
						var e = /[\w-]+/g,
							f = a.className.match(e) || [];
						b.a.o(d.match(e), function(a) {
							var d = b.a.i(f, a);
							0 <= d ? c || f.splice(d, 1) : c && f.push(a)
						});
						a.className = f.join(" ")
					}
				},
				cb: function(a, d) {
					var c = b.a.d(d);
					if (c === p || c === I) c = "";
					if (3 === a.nodeType) a.data = c;
					else {
						var e = b.e.firstChild(a);
						!e || 3 != e.nodeType || b.e.nextSibling(e) ? b.e.N(a, [y.createTextNode(c)]) : e.data = c;
						b.a.wb(a)
					}
				},
				ab: function(a, b) {
					a.name = b;
					if (7 >= n) try {
						a.mergeAttributes(y.createElement("<input name='" + a.name + "'/>"), r)
					} catch (d) {}
				},
				wb: function(a) {
					9 <= n && (a = 1 == a.nodeType ? a : a.parentNode, a.style && (a.style.zoom = a.style.zoom))
				},
				ub: function(a) {
					if (9 <= n) {
						var b = a.style.width;
						a.style.width = 0;
						a.style.width = b
					}
				},
				Lb: function(a, d) {
					a = b.a.d(a);
					d = b.a.d(d);
					for (var c = [], e = a; e <= d; e++) c.push(e);
					return c
				},
				L: function(a) {
					for (var b = [], d = 0, c = a.length; d < c; d++) b.push(a[d]);
					return b
				},
				Pb: 6 === n,
				Qb: 7 === n,
				Z: n,
				Oa: function(a, d) {
					for (var c = b.a.L(a.getElementsByTagName("input")).concat(b.a.L(a.getElementsByTagName("textarea"))), e = "string" == typeof d ? function(a) {
							return a.name === d
						} : function(a) {
							return d.test(a.name)
						}, f = [], g = c.length - 1; 0 <= g; g--) e(c[g]) && f.push(c[g]);
					return f
				},
				Ib: function(a) {
					return "string" == typeof a && (a = b.a.D(a)) ? x.JSON && x.JSON.parse ? x.JSON.parse(a) : (new Function("return " + a))() : p
				},
				xa: function(a, d, c) {
					("undefined" == typeof JSON || "undefined" == typeof JSON.stringify) && j(Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js"));
					return JSON.stringify(b.a.d(a), d, c)
				},
				Jb: function(a, d, c) {
					c = c || {};
					var e = c.params || {}, f = c.includeFields || this.Na,
						g = a;
					if ("object" == typeof a && "form" === b.a.u(a)) for (var g = a.action, h = f.length - 1; 0 <= h; h--) for (var k = b.a.Oa(a, f[h]), l = k.length - 1; 0 <= l; l--) e[k[l].name] = k[l].value;
					d = b.a.d(d);
					var n = y.createElement("form");
					n.style.display = "none";
					n.action = g;
					n.method = "post";
					for (var w in d) a = y.createElement("input"), a.name = w, a.value = b.a.xa(b.a.d(d[w])), n.appendChild(a);
					for (w in e) a = y.createElement("input"), a.name = w, a.value = e[w], n.appendChild(a);
					y.body.appendChild(n);
					c.submitter ? c.submitter(n) : n.submit();
					setTimeout(function() {
						n.parentNode.removeChild(n)
					}, 0)
				}
			}
		};
		b.b("utils", b.a);
		b.b("utils.arrayForEach", b.a.o);
		b.b("utils.arrayFirst", b.a.lb);
		b.b("utils.arrayFilter", b.a.fa);
		b.b("utils.arrayGetDistinctValues", b.a.Ga);
		b.b("utils.arrayIndexOf",
		b.a.i);
		b.b("utils.arrayMap", b.a.V);
		b.b("utils.arrayPushAll", b.a.P);
		b.b("utils.arrayRemoveItem", b.a.ga);
		b.b("utils.extend", b.a.extend);
		b.b("utils.fieldsIncludedWithJsonPost", b.a.Na);
		b.b("utils.getFormFields", b.a.Oa);
		b.b("utils.peekObservable", b.a.ua);
		b.b("utils.postJson", b.a.Jb);
		b.b("utils.parseJson", b.a.Ib);
		b.b("utils.registerEventHandler", b.a.n);
		b.b("utils.stringifyJson", b.a.xa);
		b.b("utils.range", b.a.Lb);
		b.b("utils.toggleDomNodeCssClass", b.a.da);
		b.b("utils.triggerEvent", b.a.Ba);
		b.b("utils.unwrapObservable",
		b.a.d);
		Function.prototype.bind || (Function.prototype.bind = function(a) {
			var b = this,
				c = Array.prototype.slice.call(arguments);
			a = c.shift();
			return function() {
				return b.apply(a, c.concat(Array.prototype.slice.call(arguments)))
			}
		});
		b.a.f = new function() {
			var a = 0,
				d = "__ko__" + (new Date).getTime(),
				c = {};
			return {
				get: function(a, d) {
					var c = b.a.f.la(a, r);
					return c === I ? I : c[d]
				},
				set: function(a, d, c) {
					c === I && b.a.f.la(a, r) === I || (b.a.f.la(a, m)[d] = c)
				},
				la: function(b, f) {
					var g = b[d];
					if (!g || !("null" !== g && c[g])) {
						if (!f) return I;
						g = b[d] = "ko" + a++;
						c[g] = {}
					}
					return c[g]
				},
				clear: function(a) {
					var b = a[d];
					return b ? (delete c[b], a[d] = p, m) : r
				}
			}
		};
		b.b("utils.domData", b.a.f);
		b.b("utils.domData.clear", b.a.f.clear);
		b.a.F = new function() {
			function a(a, d) {
				var e = b.a.f.get(a, c);
				e === I && d && (e = [], b.a.f.set(a, c, e));
				return e
			}

			function d(c) {
				var e = a(c, r);
				if (e) for (var e = e.slice(0), k = 0; k < e.length; k++) e[k](c);
				b.a.f.clear(c);
				"function" == typeof F && "function" == typeof F.cleanData && F.cleanData([c]);
				if (f[c.nodeType]) for (e = c.firstChild; c = e;) e = c.nextSibling, 8 === c.nodeType && d(c)
			}
			var c = "__ko_domNodeDisposal__" + (new Date).getTime(),
				e = {
					1: m,
					8: m,
					9: m
				}, f = {
					1: m,
					9: m
				};
			return {
				Ca: function(b, d) {
					"function" != typeof d && j(Error("Callback must be a function"));
					a(b, m).push(d)
				},
				Xa: function(d, e) {
					var f = a(d, r);
					f && (b.a.ga(f, e), 0 == f.length && b.a.f.set(d, c, I))
				},
				A: function(a) {
					if (e[a.nodeType] && (d(a), f[a.nodeType])) {
						var c = [];
						b.a.P(c, a.getElementsByTagName("*"));
						for (var k = 0, l = c.length; k < l; k++) d(c[k])
					}
					return a
				},
				removeNode: function(a) {
					b.A(a);
					a.parentNode && a.parentNode.removeChild(a)
				}
			}
		};
		b.A = b.a.F.A;
		b.removeNode = b.a.F.removeNode;
		b.b("cleanNode", b.A);
		b.b("removeNode", b.removeNode);
		b.b("utils.domNodeDisposal", b.a.F);
		b.b("utils.domNodeDisposal.addDisposeCallback", b.a.F.Ca);
		b.b("utils.domNodeDisposal.removeDisposeCallback", b.a.F.Xa);
		b.a.ta = function(a) {
			var d;
			if ("undefined" != typeof F) if (F.parseHTML) d = F.parseHTML(a);
			else {
				if ((d = F.clean([a])) && d[0]) {
					for (a = d[0]; a.parentNode && 11 !== a.parentNode.nodeType;) a = a.parentNode;
					a.parentNode && a.parentNode.removeChild(a)
				}
			} else {
				var c = b.a.D(a).toLowerCase();
				d = y.createElement("div");
				c = c.match(/^<(thead|tbody|tfoot)/) && [1, "<table>", "</table>"] || !c.indexOf("<tr") && [2, "<table><tbody>", "</tbody></table>"] || (!c.indexOf("<td") || !c.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || [0, "", ""];
				a = "ignored<div>" + c[1] + a + c[2] + "</div>";
				for ("function" == typeof x.innerShiv ? d.appendChild(x.innerShiv(a)) : d.innerHTML = a; c[0]--;) d = d.lastChild;
				d = b.a.L(d.lastChild.childNodes)
			}
			return d
		};
		b.a.ca = function(a, d) {
			b.a.ka(a);
			d = b.a.d(d);
			if (d !== p && d !== I) if ("string" != typeof d && (d = d.toString()),
				"undefined" != typeof F) F(a).html(d);
			else for (var c = b.a.ta(d), e = 0; e < c.length; e++) a.appendChild(c[e])
		};
		b.b("utils.parseHtmlFragment", b.a.ta);
		b.b("utils.setHtml", b.a.ca);
		var R = {};
		b.s = {
			ra: function(a) {
				"function" != typeof a && j(Error("You can only pass a function to ko.memoization.memoize()"));
				var b = (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1) + (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1);
				R[b] = a;
				return "\x3c!--[ko_memo:" + b + "]--\x3e"
			},
			hb: function(a, b) {
				var c = R[a];
				c === I && j(Error("Couldn't find any memo with ID " + a + ". Perhaps it's already been unmemoized."));
				try {
					return c.apply(p, b || []), m
				} finally {
					delete R[a]
				}
			},
			ib: function(a, d) {
				var c = [];
				ca(a, c);
				for (var e = 0, f = c.length; e < f; e++) {
					var g = c[e].sb,
						h = [g];
					d && b.a.P(h, d);
					b.s.hb(c[e].Fb, h);
					g.nodeValue = "";
					g.parentNode && g.parentNode.removeChild(g)
				}
			},
			Ua: function(a) {
				return (a = a.match(/^\[ko_memo\:(.*?)\]$/)) ? a[1] : p
			}
		};
		b.b("memoization", b.s);
		b.b("memoization.memoize", b.s.ra);
		b.b("memoization.unmemoize", b.s.hb);
		b.b("memoization.parseMemoText", b.s.Ua);
		b.b("memoization.unmemoizeDomNodeAndDescendants",
		b.s.ib);
		b.Ma = {
			throttle: function(a, d) {
				a.throttleEvaluation = d;
				var c = p;
				return b.j({
					read: a,
					write: function(b) {
						clearTimeout(c);
						c = setTimeout(function() {
							a(b)
						}, d)
					}
				})
			},
			notify: function(a, d) {
				a.equalityComparer = "always" == d ? u(r) : b.m.fn.equalityComparer;
				return a
			}
		};
		b.b("extenders", b.Ma);
		b.fb = function(a, d, c) {
			this.target = a;
			this.ha = d;
			this.rb = c;
			b.p(this, "dispose", this.B)
		};
		b.fb.prototype.B = function() {
			this.Cb = m;
			this.rb()
		};
		b.S = function() {
			this.w = {};
			b.a.extend(this, b.S.fn);
			b.p(this, "subscribe", this.ya);
			b.p(this, "extend",
			this.extend);
			b.p(this, "getSubscriptionsCount", this.yb)
		};
		b.S.fn = {
			ya: function(a, d, c) {
				c = c || "change";
				var e = new b.fb(this, d ? a.bind(d) : a, function() {
					b.a.ga(this.w[c], e)
				}.bind(this));
				this.w[c] || (this.w[c] = []);
				this.w[c].push(e);
				return e
			},
			notifySubscribers: function(a, d) {
				d = d || "change";
				this.w[d] && b.r.K(function() {
					b.a.o(this.w[d].slice(0), function(b) {
						b && b.Cb !== m && b.ha(a)
					})
				}, this)
			},
			yb: function() {
				var a = 0,
					b;
				for (b in this.w) this.w.hasOwnProperty(b) && (a += this.w[b].length);
				return a
			},
			extend: function(a) {
				var d = this;
				if (a) for (var c in a) {
					var e = b.Ma[c];
					"function" == typeof e && (d = e(d, a[c]))
				}
				return d
			}
		};
		b.Qa = function(a) {
			return "function" == typeof a.ya && "function" == typeof a.notifySubscribers
		};
		b.b("subscribable", b.S);
		b.b("isSubscribable", b.Qa);
		var C = [];
		b.r = {
			mb: function(a) {
				C.push({
					ha: a,
					La: []
				})
			},
			end: function() {
				C.pop()
			},
			Wa: function(a) {
				b.Qa(a) || j(Error("Only subscribable things can act as dependencies"));
				if (0 < C.length) {
					var d = C[C.length - 1];
					d && !(0 <= b.a.i(d.La, a)) && (d.La.push(a), d.ha(a))
				}
			},
			K: function(a, b, c) {
				try {
					return C.push(p), a.apply(b, c || [])
				} finally {
					C.pop()
				}
			}
		};
		var ma = {
			undefined: m,
			"boolean": m,
			number: m,
			string: m
		};
		b.m = function(a) {
			function d() {
				if (0 < arguments.length) {
					if (!d.equalityComparer || !d.equalityComparer(c, arguments[0])) d.H(), c = arguments[0], d.G();
					return this
				}
				b.r.Wa(d);
				return c
			}
			var c = a;
			b.S.call(d);
			d.t = function() {
				return c
			};
			d.G = function() {
				d.notifySubscribers(c)
			};
			d.H = function() {
				d.notifySubscribers(c, "beforeChange")
			};
			b.a.extend(d, b.m.fn);
			b.p(d, "peek", d.t);
			b.p(d, "valueHasMutated", d.G);
			b.p(d, "valueWillMutate", d.H);
			return d
		};
		b.m.fn = {
			equalityComparer: function(a,
			b) {
				return a === p || typeof a in ma ? a === b : r
			}
		};
		var E = b.m.Kb = "__ko_proto__";
		b.m.fn[E] = b.m;
		b.ma = function(a, d) {
			return a === p || a === I || a[E] === I ? r : a[E] === d ? m : b.ma(a[E], d)
		};
		b.$ = function(a) {
			return b.ma(a, b.m)
		};
		b.Ra = function(a) {
			return "function" == typeof a && a[E] === b.m || "function" == typeof a && a[E] === b.j && a.zb ? m : r
		};
		b.b("observable", b.m);
		b.b("isObservable", b.$);
		b.b("isWriteableObservable", b.Ra);
		b.R = function(a) {
			0 == arguments.length && (a = []);
			a !== p && (a !== I && !("length" in a)) && j(Error("The argument passed when initializing an observable array must be an array, or null, or undefined."));
			var d = b.m(a);
			b.a.extend(d, b.R.fn);
			return d
		};
		b.R.fn = {
			remove: function(a) {
				for (var b = this.t(), c = [], e = "function" == typeof a ? a : function(b) {
						return b === a
					}, f = 0; f < b.length; f++) {
					var g = b[f];
					e(g) && (0 === c.length && this.H(), c.push(g), b.splice(f, 1), f--)
				}
				c.length && this.G();
				return c
			},
			removeAll: function(a) {
				if (a === I) {
					var d = this.t(),
						c = d.slice(0);
					this.H();
					d.splice(0, d.length);
					this.G();
					return c
				}
				return !a ? [] : this.remove(function(d) {
					return 0 <= b.a.i(a, d)
				})
			},
			destroy: function(a) {
				var b = this.t(),
					c = "function" == typeof a ? a : function(b) {
						return b === a
					};
				this.H();
				for (var e = b.length - 1; 0 <= e; e--) c(b[e]) && (b[e]._destroy = m);
				this.G()
			},
			destroyAll: function(a) {
				return a === I ? this.destroy(u(m)) : !a ? [] : this.destroy(function(d) {
					return 0 <= b.a.i(a, d)
				})
			},
			indexOf: function(a) {
				var d = this();
				return b.a.i(d, a)
			},
			replace: function(a, b) {
				var c = this.indexOf(a);
				0 <= c && (this.H(), this.t()[c] = b, this.G())
			}
		};
		b.a.o("pop push reverse shift sort splice unshift".split(" "), function(a) {
			b.R.fn[a] = function() {
				var b = this.t();
				this.H();
				b = b[a].apply(b, arguments);
				this.G();
				return b
			}
		});
		b.a.o(["slice"],

		function(a) {
			b.R.fn[a] = function() {
				var b = this();
				return b[a].apply(b, arguments)
			}
		});
		b.b("observableArray", b.R);
		b.j = function(a, d, c) {
			function e() {
				b.a.o(z, function(a) {
					a.B()
				});
				z = []
			}

			function f() {
				var a = h.throttleEvaluation;
				a && 0 <= a ? (clearTimeout(t), t = setTimeout(g, a)) : g()
			}

			function g() {
				if (!q) if (n && w()) A();
				else {
					q = m;
					try {
						var a = b.a.V(z, function(a) {
							return a.target
						});
						b.r.mb(function(c) {
							var d;
							0 <= (d = b.a.i(a, c)) ? a[d] = I : z.push(c.ya(f))
						});
						for (var c = s.call(d), e = a.length - 1; 0 <= e; e--) a[e] && z.splice(e, 1)[0].B();
						n = m;
						h.notifySubscribers(l,
							"beforeChange");
						l = c
					} finally {
						b.r.end()
					}
					h.notifySubscribers(l);
					q = r;
					z.length || A()
				}
			}

			function h() {
				if (0 < arguments.length) return "function" === typeof v ? v.apply(d, arguments) : j(Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.")), this;
				n || g();
				b.r.Wa(h);
				return l
			}

			function k() {
				return !n || 0 < z.length
			}
			var l, n = r,
				q = r,
				s = a;
			s && "object" == typeof s ? (c = s, s = c.read) : (c = c || {}, s || (s = c.read));
			"function" != typeof s && j(Error("Pass a function that returns the value of the ko.computed"));
			var v = c.write,
				G = c.disposeWhenNodeIsRemoved || c.W || p,
				w = c.disposeWhen || c.Ka || u(r),
				A = e,
				z = [],
				t = p;
			d || (d = c.owner);
			h.t = function() {
				n || g();
				return l
			};
			h.xb = function() {
				return z.length
			};
			h.zb = "function" === typeof c.write;
			h.B = function() {
				A()
			};
			h.pa = k;
			b.S.call(h);
			b.a.extend(h, b.j.fn);
			b.p(h, "peek", h.t);
			b.p(h, "dispose", h.B);
			b.p(h, "isActive", h.pa);
			b.p(h, "getDependenciesCount", h.xb);
			c.deferEvaluation !== m && g();
			if (G && k()) {
				A = function() {
					b.a.F.Xa(G, arguments.callee);
					e()
				};
				b.a.F.Ca(G, A);
				var D = w,
					w = function() {
						return !b.a.X(G) || D()
					}
			}
			return h
		};
		b.Bb = function(a) {
			return b.ma(a, b.j)
		};
		w = b.m.Kb;
		b.j[w] = b.m;
		b.j.fn = {};
		b.j.fn[w] = b.j;
		b.b("dependentObservable", b.j);
		b.b("computed", b.j);
		b.b("isComputed", b.Bb);
		b.gb = function(a) {
			0 == arguments.length && j(Error("When calling ko.toJS, pass the object you want to convert."));
			return ba(a, function(a) {
				for (var c = 0; b.$(a) && 10 > c; c++) a = a();
				return a
			})
		};
		b.toJSON = function(a, d, c) {
			a = b.gb(a);
			return b.a.xa(a, d, c)
		};
		b.b("toJS", b.gb);
		b.b("toJSON", b.toJSON);
		b.k = {
			q: function(a) {
				switch (b.a.u(a)) {
					case "option":
						return a.__ko__hasDomDataOptionValue__ === m ? b.a.f.get(a, b.c.options.sa) : 7 >= b.a.Z ? a.getAttributeNode("value").specified ? a.value : a.text : a.value;
					case "select":
						return 0 <= a.selectedIndex ? b.k.q(a.options[a.selectedIndex]) : I;
					default:
						return a.value
				}
			},
			T: function(a, d) {
				switch (b.a.u(a)) {
					case "option":
						switch (typeof d) {
							case "string":
								b.a.f.set(a, b.c.options.sa, I);
								"__ko__hasDomDataOptionValue__" in a && delete a.__ko__hasDomDataOptionValue__;
								a.value = d;
								break;
							default:
								b.a.f.set(a, b.c.options.sa, d), a.__ko__hasDomDataOptionValue__ = m, a.value = "number" === typeof d ? d : ""
						}
						break;
					case "select":
						for (var c = a.options.length - 1; 0 <= c; c--) if (b.k.q(a.options[c]) == d) {
							a.selectedIndex = c;
							break
						}
						break;
					default:
						if (d === p || d === I) d = "";
						a.value = d
				}
			}
		};
		b.b("selectExtensions", b.k);
		b.b("selectExtensions.readValue", b.k.q);
		b.b("selectExtensions.writeValue", b.k.T);
		var ka = /\@ko_token_(\d+)\@/g,
			na = ["true", "false"],
			oa = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i;
		b.g = {
			Q: [],
			aa: function(a) {
				var d = b.a.D(a);
				if (3 > d.length) return [];
				"{" === d.charAt(0) && (d = d.substring(1, d.length - 1));
				a = [];
				for (var c = p, e, f = 0; f < d.length; f++) {
					var g = d.charAt(f);
					if (c === p) switch (g) {
						case '"':
						case "'":
						case "/":
							c = f, e = g
					} else if (g == e && "\\" !== d.charAt(f - 1)) {
						g = d.substring(c, f + 1);
						a.push(g);
						var h = "@ko_token_" + (a.length - 1) + "@",
							d = d.substring(0, c) + h + d.substring(f + 1),
							f = f - (g.length - h.length),
							c = p
					}
				}
				e = c = p;
				for (var k = 0, l = p, f = 0; f < d.length; f++) {
					g = d.charAt(f);
					if (c === p) switch (g) {
						case "{":
							c = f;
							l = g;
							e = "}";
							break;
						case "(":
							c = f;
							l = g;
							e = ")";
							break;
						case "[":
							c = f, l = g, e = "]"
					}
					g === l ? k++ : g === e && (k--, 0 === k && (g = d.substring(c, f + 1), a.push(g), h = "@ko_token_" + (a.length - 1) + "@", d = d.substring(0, c) + h + d.substring(f + 1), f -= g.length - h.length, c = p))
				}
				e = [];
				d = d.split(",");
				c = 0;
				for (f = d.length; c < f; c++) k = d[c], l = k.indexOf(":"), 0 < l && l < k.length - 1 ? (g = k.substring(l + 1), e.push({
					key: P(k.substring(0, l), a),
					value: P(g, a)
				})) : e.push({
					unknown: P(k, a)
				});
				return e
			},
			ba: function(a) {
				var d = "string" === typeof a ? b.g.aa(a) : a,
					c = [];
				a = [];
				for (var e, f = 0; e = d[f]; f++) if (0 < c.length && c.push(","), e.key) {
					var g;
					a: {
						g = e.key;
						var h = b.a.D(g);
						switch (h.length && h.charAt(0)) {
							case "'":
							case '"':
								break a;
							default:
								g = "'" + h + "'"
						}
					}
					e = e.value;
					c.push(g);
					c.push(":");
					c.push(e);
					e = b.a.D(e);
					0 <= b.a.i(na, b.a.D(e).toLowerCase()) ? e = r : (h = e.match(oa), e = h === p ? r : h[1] ? "Object(" + h[1] + ")" + h[2] : e);
					e && (0 < a.length && a.push(", "), a.push(g + " : function(__ko_value) { " + e + " = __ko_value; }"))
				} else e.unknown && c.push(e.unknown);
				d = c.join("");
				0 < a.length && (d = d + ", '_ko_property_writers' : { " + a.join("") + " } ");
				return d
			},
			Eb: function(a, d) {
				for (var c = 0; c < a.length; c++) if (b.a.D(a[c].key) == d) return m;
				return r
			},
			ea: function(a, d, c, e, f) {
				if (!a || !b.Ra(a)) {
					if ((a = d()._ko_property_writers) && a[c]) a[c](e)
				} else(!f || a.t() !== e) && a(e)
			}
		};
		b.b("expressionRewriting", b.g);
		b.b("expressionRewriting.bindingRewriteValidators", b.g.Q);
		b.b("expressionRewriting.parseObjectLiteral", b.g.aa);
		b.b("expressionRewriting.preProcessBindings", b.g.ba);
		b.b("jsonExpressionRewriting", b.g);
		b.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson", b.g.ba);
		var K = "\x3c!--test--\x3e" === y.createComment("test").text,
			ja = K ? /^\x3c!--\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*--\x3e$/ : /^\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*$/,
			ia = K ? /^\x3c!--\s*\/ko\s*--\x3e$/ :
				/^\s*\/ko\s*$/,
			pa = {
				ul: m,
				ol: m
			};
		b.e = {
			I: {},
			childNodes: function(a) {
				return B(a) ? aa(a) : a.childNodes
			},
			Y: function(a) {
				if (B(a)) {
					a = b.e.childNodes(a);
					for (var d = 0, c = a.length; d < c; d++) b.removeNode(a[d])
				} else b.a.ka(a)
			},
			N: function(a, d) {
				if (B(a)) {
					b.e.Y(a);
					for (var c = a.nextSibling, e = 0, f = d.length; e < f; e++) c.parentNode.insertBefore(d[e], c)
				} else b.a.N(a, d)
			},
			Va: function(a, b) {
				B(a) ? a.parentNode.insertBefore(b, a.nextSibling) : a.firstChild ? a.insertBefore(b, a.firstChild) : a.appendChild(b)
			},
			Pa: function(a, d, c) {
				c ? B(a) ? a.parentNode.insertBefore(d,
				c.nextSibling) : c.nextSibling ? a.insertBefore(d, c.nextSibling) : a.appendChild(d) : b.e.Va(a, d)
			},
			firstChild: function(a) {
				return !B(a) ? a.firstChild : !a.nextSibling || H(a.nextSibling) ? p : a.nextSibling
			},
			nextSibling: function(a) {
				B(a) && (a = $(a));
				return a.nextSibling && H(a.nextSibling) ? p : a.nextSibling
			},
			jb: function(a) {
				return (a = B(a)) ? a[1] : p
			},
			Ta: function(a) {
				if (pa[b.a.u(a)]) {
					var d = a.firstChild;
					if (d) {
						do if (1 === d.nodeType) {
							var c;
							c = d.firstChild;
							var e = p;
							if (c) {
								do if (e) e.push(c);
								else if (B(c)) {
									var f = $(c, m);
									f ? c = f : e = [c]
								} else H(c) && (e = [c]);
								while (c = c.nextSibling)
							}
							if (c = e) {
								e = d.nextSibling;
								for (f = 0; f < c.length; f++) e ? a.insertBefore(c[f], e) : a.appendChild(c[f])
							}
						}
						while (d = d.nextSibling)
					}
				}
			}
		};
		b.b("virtualElements", b.e);
		b.b("virtualElements.allowedBindings", b.e.I);
		b.b("virtualElements.emptyNode", b.e.Y);
		b.b("virtualElements.insertAfter", b.e.Pa);
		b.b("virtualElements.prepend", b.e.Va);
		b.b("virtualElements.setDomNodeChildren", b.e.N);
		b.J = function() {
			this.Ha = {}
		};
		b.a.extend(b.J.prototype, {
			nodeHasBindings: function(a) {
				switch (a.nodeType) {
					case 1:
						return a.getAttribute("data-bind") != p;
					case 8:
						return b.e.jb(a) != p;
					default:
						return r
				}
			},
			getBindings: function(a, b) {
				var c = this.getBindingsString(a, b);
				return c ? this.parseBindingsString(c, b, a) : p
			},
			getBindingsString: function(a) {
				switch (a.nodeType) {
					case 1:
						return a.getAttribute("data-bind");
					case 8:
						return b.e.jb(a);
					default:
						return p
				}
			},
			parseBindingsString: function(a, d, c) {
				try {
					var e;
					if (!(e = this.Ha[a])) {
						var f = this.Ha,
							g, h = "with($context){with($data||{}){return{" + b.g.ba(a) + "}}}";
						g = new Function("$context", "$element", h);
						e = f[a] = g;
						//console.log(e);
					}
					return e(d, c)
				} catch (k) {
					j(Error("Unable to parse bindings.\nMessage: " + k + ";\nBindings value: " + a))
				}
			}
		});
		b.J.instance = new b.J;
		b.b("bindingProvider", b.J);
		b.c = {};
		b.z = function(a, d, c) {
			d ? (b.a.extend(this, d), this.$parentContext = d, this.$parent = d.$data, this.$parents = (d.$parents || []).slice(0), this.$parents.unshift(this.$parent)) : (this.$parents = [], this.$root = a, this.ko = b);
			this.$data = a;
			c && (this[c] = a)
		};
		b.z.prototype.createChildContext = function(a, d) {
			return new b.z(a, this, d)
		};
		b.z.prototype.extend = function(a) {
			var d = b.a.extend(new b.z, this);
			return b.a.extend(d, a)
		};
		b.eb = function(a, d) {
			if (2 == arguments.length) b.a.f.set(a, "__ko_bindingContext__", d);
			else return b.a.f.get(a, "__ko_bindingContext__")
		};
		b.Fa = function(a, d, c) {
			1 === a.nodeType && b.e.Ta(a);
			return X(a, d, c, m)
		};
		b.Ea = function(a, b) {
			(1 === b.nodeType || 8 === b.nodeType) && Z(a, b, m)
		};
		b.Da = function(a, b) {
			b && (1 !== b.nodeType && 8 !== b.nodeType) && j(Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node"));
			b = b || x.document.body;
			Y(a, b, m)
		};
		b.ja = function(a) {
			switch (a.nodeType) {
				case 1:
				case 8:
					var d = b.eb(a);
					if (d) return d;
					if (a.parentNode) return b.ja(a.parentNode)
			}
			return I
		};
		b.pb = function(a) {
			return (a = b.ja(a)) ? a.$data : I
		};
		b.b("bindingHandlers", b.c);
		b.b("applyBindings", b.Da);
		b.b("applyBindingsToDescendants", b.Ea);
		b.b("applyBindingsToNode", b.Fa);
		b.b("contextFor", b.ja);
		b.b("dataFor", b.pb);
		var fa = {
			"class": "className",
			"for": "htmlFor"
		};
		b.c.attr = {
			update: function(a, d) {
				var c = b.a.d(d()) || {}, e;
				for (e in c) if ("string" == typeof e) {
					var f = b.a.d(c[e]),
						g = f === r || f === p || f === I;
					g && a.removeAttribute(e);
					8 >= b.a.Z && e in fa ? (e = fa[e], g ? a.removeAttribute(e) : a[e] = f) : g || a.setAttribute(e, f.toString());
					"name" === e && b.a.ab(a, g ? "" : f.toString())
				}
			}
		};
		b.c.checked = {
			init: function(a, d, c) {
				b.a.n(a, "click", function() {
					var e;
					if ("checkbox" == a.type) e = a.checked;
					else if ("radio" == a.type && a.checked) e = a.value;
					else return;
					var f = d(),
						g = b.a.d(f);
					"checkbox" == a.type && g instanceof Array ? (e = b.a.i(g, a.value), a.checked && 0 > e ? f.push(a.value) : !a.checked && 0 <= e && f.splice(e, 1)) : b.g.ea(f, c, "checked", e, m)
				});
				"radio" == a.type && !a.name && b.c.uniqueName.init(a, u(m))
			},
			update: function(a, d) {
				var c = b.a.d(d());
				"checkbox" == a.type ? a.checked = c instanceof Array ? 0 <= b.a.i(c, a.value) : c : "radio" == a.type && (a.checked = a.value == c)
			}
		};
		b.c.css = {
			update: function(a, d) {
				var c = b.a.d(d());
				if ("object" == typeof c) for (var e in c) {
					var f = b.a.d(c[e]);
					b.a.da(a, e, f)
				} else c = String(c || ""), b.a.da(a, a.__ko__cssValue, r), a.__ko__cssValue = c, b.a.da(a, c, m)
			}
		};
		b.c.enable = {
			update: function(a, d) {
				var c = b.a.d(d());
				c && a.disabled ? a.removeAttribute("disabled") : !c && !a.disabled && (a.disabled = m)
			}
		};
		b.c.disable = {
			update: function(a, d) {
				b.c.enable.update(a, function() {
					return !b.a.d(d())
				})
			}
		};
		b.c.event = {
			init: function(a, d, c, e) {
				var f = d() || {}, g;
				for (g in f)(function() {
					var f = g;
					"string" == typeof f && b.a.n(a, f, function(a) {
						var g, n = d()[f];
						if (n) {
							var q = c();
							try {
								var s = b.a.L(arguments);
								s.unshift(e);
								g = n.apply(e, s)
							} finally {
								g !== m && (a.preventDefault ? a.preventDefault() : a.returnValue = r)
							}
							q[f + "Bubble"] === r && (a.cancelBubble = m, a.stopPropagation && a.stopPropagation())
						}
					})
				})()
			}
		};
		b.c.foreach = {
			Sa: function(a) {
				return function() {
					var d = a(),
						c = b.a.ua(d);
					if (!c || "number" == typeof c.length) return {
						foreach: d,
						templateEngine: b.C.oa
					};
					b.a.d(d);
					return {
						foreach: c.data,
						as: c.as,
						includeDestroyed: c.includeDestroyed,
						afterAdd: c.afterAdd,
						beforeRemove: c.beforeRemove,
						afterRender: c.afterRender,
						beforeMove: c.beforeMove,
						afterMove: c.afterMove,
						templateEngine: b.C.oa
					}
				}
			},
			init: function(a, d) {
				return b.c.template.init(a, b.c.foreach.Sa(d))
			},
			update: function(a, d, c, e, f) {
				return b.c.template.update(a, b.c.foreach.Sa(d), c, e, f)
			}
		};
		b.g.Q.foreach = r;
		b.e.I.foreach = m;
		b.c.hasfocus = {
			init: function(a, d, c) {
				function e(e) {
					a.__ko_hasfocusUpdating = m;
					var f = a.ownerDocument;
					"activeElement" in f && (e = f.activeElement === a);
					f = d();
					b.g.ea(f, c, "hasfocus", e, m);
					a.__ko_hasfocusUpdating = r
				}
				var f = e.bind(p, m),
					g = e.bind(p, r);
				b.a.n(a, "focus", f);
				b.a.n(a, "focusin", f);
				b.a.n(a, "blur", g);
				b.a.n(a, "focusout", g)
			},
			update: function(a, d) {
				var c = b.a.d(d());
				a.__ko_hasfocusUpdating || (c ? a.focus() : a.blur(), b.r.K(b.a.Ba, p, [a, c ? "focusin" : "focusout"]))
			}
		};
		b.c.html = {
			init: function() {
				return {
					controlsDescendantBindings: m
				}
			},
			update: function(a, d) {
				b.a.ca(a, d())
			}
		};
		var da = "__ko_withIfBindingData";
		Q("if");
		Q("ifnot", r, m);
		Q("with", m, r, function(a,
		b) {
			return a.createChildContext(b)
		});
		b.c.options = {
			update: function(a, d, c) {
				"select" !== b.a.u(a) && j(Error("options binding applies only to SELECT elements"));
				for (var e = 0 == a.length, f = b.a.V(b.a.fa(a.childNodes, function(a) {
					return a.tagName && "option" === b.a.u(a) && a.selected
				}), function(a) {
					return b.k.q(a) || a.innerText || a.textContent
				}), g = a.scrollTop, h = b.a.d(d()); 0 < a.length;) b.A(a.options[0]), a.remove(0);
				if (h) {
					c = c();
					var k = c.optionsIncludeDestroyed;
					"number" != typeof h.length && (h = [h]);
					if (c.optionsCaption) {
						var l = y.createElement("option");
						b.a.ca(l, c.optionsCaption);
						b.k.T(l, I);
						a.appendChild(l)
					}
					d = 0;
					for (var n = h.length; d < n; d++) {
						var q = h[d];
						if (!q || !q._destroy || k) {
							var l = y.createElement("option"),
								s = function(a, b, c) {
									var d = typeof b;
									return "function" == d ? b(a) : "string" == d ? a[b] : c
								}, v = s(q, c.optionsValue, q);
							b.k.T(l, b.a.d(v));
							q = s(q, c.optionsText, v);
							b.a.cb(l, q);
							a.appendChild(l)
						}
					}
					h = a.getElementsByTagName("option");
					d = k = 0;
					for (n = h.length; d < n; d++) 0 <= b.a.i(f, b.k.q(h[d])) && (b.a.bb(h[d], m), k++);
					a.scrollTop = g;
					e && "value" in c && ea(a, b.a.ua(c.value), m);
					b.a.ub(a)
				}
			}
		};
		b.c.options.sa = "__ko.optionValueDomData__";
		b.c.selectedOptions = {
			init: function(a, d, c) {
				b.a.n(a, "change", function() {
					var e = d(),
						f = [];
					b.a.o(a.getElementsByTagName("option"), function(a) {
						a.selected && f.push(b.k.q(a))
					});
					b.g.ea(e, c, "value", f)
				})
			},
			update: function(a, d) {
				"select" != b.a.u(a) && j(Error("values binding applies only to SELECT elements"));
				var c = b.a.d(d());
				c && "number" == typeof c.length && b.a.o(a.getElementsByTagName("option"), function(a) {
					var d = 0 <= b.a.i(c, b.k.q(a));
					b.a.bb(a, d)
				})
			}
		};
		b.c.style = {
			update: function(a,
			d) {
				var c = b.a.d(d() || {}),
					e;
				for (e in c) if ("string" == typeof e) {
					var f = b.a.d(c[e]);
					a.style[e] = f || ""
				}
			}
		};
		b.c.submit = {
			init: function(a, d, c, e) {
				"function" != typeof d() && j(Error("The value for a submit binding must be a function"));
				b.a.n(a, "submit", function(b) {
					var c, h = d();
					try {
						c = h.call(e, a)
					} finally {
						c !== m && (b.preventDefault ? b.preventDefault() : b.returnValue = r)
					}
				})
			}
		};
		b.c.text = {
			update: function(a, d) {
				b.a.cb(a, d())
			}
		};
		b.e.I.text = m;
		b.c.uniqueName = {
			init: function(a, d) {
				if (d()) {
					var c = "ko_unique_" + ++b.c.uniqueName.ob;
					b.a.ab(a,
					c)
				}
			}
		};
		b.c.uniqueName.ob = 0;
		b.c.value = {
			init: function(a, d, c) {
				function e() {
					h = r;
					var e = d(),
						f = b.k.q(a);
					b.g.ea(e, c, "value", f)
				}
				var f = ["change"],
					g = c().valueUpdate,
					h = r;
				g && ("string" == typeof g && (g = [g]), b.a.P(f, g), f = b.a.Ga(f));
				if (b.a.Z && ("input" == a.tagName.toLowerCase() && "text" == a.type && "off" != a.autocomplete && (!a.form || "off" != a.form.autocomplete)) && -1 == b.a.i(f, "propertychange")) b.a.n(a, "propertychange", function() {
					h = m
				}), b.a.n(a, "blur", function() {
					h && e()
				});
				b.a.o(f, function(c) {
					var d = e;
					b.a.Ob(c, "after") && (d = function() {
						setTimeout(e,
						0)
					}, c = c.substring(5));
					b.a.n(a, c, d)
				})
			},
			update: function(a, d) {
				var c = "select" === b.a.u(a),
					e = b.a.d(d()),
					f = b.k.q(a),
					g = e != f;
				0 === e && (0 !== f && "0" !== f) && (g = m);
				g && (f = function() {
					b.k.T(a, e)
				}, f(), c && setTimeout(f, 0));
				c && 0 < a.length && ea(a, e, r)
			}
		};
		b.c.visible = {
			update: function(a, d) {
				var c = b.a.d(d()),
					e = "none" != a.style.display;
				c && !e ? a.style.display = "" : !c && e && (a.style.display = "none")
			}
		};
		b.c.click = {
			init: function(a, d, c, e) {
				return b.c.event.init.call(this, a, function() {
					var a = {};
					a.click = d();
					return a
				}, c, e)
			}
		};
		b.v = function() {};
		b.v.prototype.renderTemplateSource = function() {
			j(Error("Override renderTemplateSource"))
		};
		b.v.prototype.createJavaScriptEvaluatorBlock = function() {
			j(Error("Override createJavaScriptEvaluatorBlock"))
		};
		b.v.prototype.makeTemplateSource = function(a, d) {
			if ("string" == typeof a) {
				d = d || y;
				var c = d.getElementById(a);
				c || j(Error("Cannot find template with ID " + a));
				return new b.l.h(c)
			}
			if (1 == a.nodeType || 8 == a.nodeType) return new b.l.O(a);
			j(Error("Unknown template type: " + a))
		};
		b.v.prototype.renderTemplate = function(a, b, c, e) {
			a = this.makeTemplateSource(a, e);
			return this.renderTemplateSource(a, b, c)
		};
		b.v.prototype.isTemplateRewritten = function(a, b) {
			return this.allowTemplateRewriting === r ? m : this.makeTemplateSource(a, b).data("isRewritten")
		};
		b.v.prototype.rewriteTemplate = function(a, b, c) {
			a = this.makeTemplateSource(a, c);
			b = b(a.text());
			a.text(b);
			a.data("isRewritten", m)
		};
		b.b("templateEngine", b.v);
		var qa = /(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9\-]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/gi,
			ra = /\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;
		b.za = {
			vb: function(a,
			d, c) {
				d.isTemplateRewritten(a, c) || d.rewriteTemplate(a, function(a) {
					return b.za.Gb(a, d)
				}, c)
			},
			Gb: function(a, b) {
				return a.replace(qa, function(a, e, f, g, h, k, l) {
					return W(l, e, b)
				}).replace(ra, function(a, e) {
					return W(e, "\x3c!-- ko --\x3e", b)
				})
			},
			kb: function(a) {
				return b.s.ra(function(d, c) {
					d.nextSibling && b.Fa(d.nextSibling, a, c)
				})
			}
		};
		b.b("__tr_ambtns", b.za.kb);
		b.l = {};
		b.l.h = function(a) {
			this.h = a
		};
		b.l.h.prototype.text = function() {
			var a = b.a.u(this.h),
				a = "script" === a ? "text" : "textarea" === a ? "value" : "innerHTML";
			if (0 == arguments.length) return this.h[a];
			var d = arguments[0];
			"innerHTML" === a ? b.a.ca(this.h, d) : this.h[a] = d
		};
		b.l.h.prototype.data = function(a) {
			if (1 === arguments.length) return b.a.f.get(this.h, "templateSourceData_" + a);
			b.a.f.set(this.h, "templateSourceData_" + a, arguments[1])
		};
		b.l.O = function(a) {
			this.h = a
		};
		b.l.O.prototype = new b.l.h;
		b.l.O.prototype.text = function() {
			if (0 == arguments.length) {
				var a = b.a.f.get(this.h, "__ko_anon_template__") || {};
				a.Aa === I && a.ia && (a.Aa = a.ia.innerHTML);
				return a.Aa
			}
			b.a.f.set(this.h, "__ko_anon_template__", {
				Aa: arguments[0]
			})
		};
		b.l.h.prototype.nodes = function() {
			if (0 == arguments.length) return (b.a.f.get(this.h, "__ko_anon_template__") || {}).ia;
			b.a.f.set(this.h, "__ko_anon_template__", {
				ia: arguments[0]
			})
		};
		b.b("templateSources", b.l);
		b.b("templateSources.domElement", b.l.h);
		b.b("templateSources.anonymousTemplate", b.l.O);
		var O;
		b.wa = function(a) {
			a != I && !(a instanceof b.v) && j(Error("templateEngine must inherit from ko.templateEngine"));
			O = a
		};
		b.va = function(a, d, c, e, f) {
			c = c || {};
			(c.templateEngine || O) == I && j(Error("Set a template engine before calling renderTemplate"));
			f = f || "replaceChildren";
			if (e) {
				var g = N(e);
				return b.j(function() {
					var h = d && d instanceof b.z ? d : new b.z(b.a.d(d)),
						k = "function" == typeof a ? a(h.$data, h) : a,
						h = T(e, f, k, h, c);
					"replaceNode" == f && (e = h, g = N(e))
				}, p, {
					Ka: function() {
						return !g || !b.a.X(g)
					},
					W: g && "replaceNode" == f ? g.parentNode : g
				})
			}
			return b.s.ra(function(e) {
				b.va(a, d, c, e, "replaceNode")
			})
		};
		b.Mb = function(a, d, c, e, f) {
			function g(a, b) {
				U(b, k);
				c.afterRender && c.afterRender(b, a)
			}

			function h(d, e) {
				k = f.createChildContext(b.a.d(d), c.as);
				k.$index = e;
				var g = "function" == typeof a ? a(d, k) : a;
				return T(p, "ignoreTargetNode", g, k, c)
			}
			var k;
			return b.j(function() {
				var a = b.a.d(d) || [];
				"undefined" == typeof a.length && (a = [a]);
				a = b.a.fa(a, function(a) {
					return c.includeDestroyed || a === I || a === p || !b.a.d(a._destroy)
				});
				b.r.K(b.a.$a, p, [e, a, h, c, g])
			}, p, {
				W: e
			})
		};
		b.c.template = {
			init: function(a, d) {
				var c = b.a.d(d());
				if ("string" != typeof c && !c.name && (1 == a.nodeType || 8 == a.nodeType)) c = 1 == a.nodeType ? a.childNodes : b.e.childNodes(a), c = b.a.Hb(c), (new b.l.O(a)).nodes(c);
				return {
					controlsDescendantBindings: m
				}
			},
			update: function(a,
			d, c, e, f) {
				d = b.a.d(d());
				c = {};
				e = m;
				var g, h = p;
				"string" != typeof d && (c = d, d = c.name, "if" in c && (e = b.a.d(c["if"])), e && "ifnot" in c && (e = !b.a.d(c.ifnot)), g = b.a.d(c.data));
				"foreach" in c ? h = b.Mb(d || a, e && c.foreach || [], c, a, f) : e ? (f = "data" in c ? f.createChildContext(g, c.as) : f, h = b.va(d || a, f, c, a)) : b.e.Y(a);
				f = h;
				(g = b.a.f.get(a, "__ko__templateComputedDomDataKey__")) && "function" == typeof g.B && g.B();
				b.a.f.set(a, "__ko__templateComputedDomDataKey__", f && f.pa() ? f : I)
			}
		};
		b.g.Q.template = function(a) {
			a = b.g.aa(a);
			return 1 == a.length && a[0].unknown || b.g.Eb(a, "name") ? p : "This template engine does not support anonymous templates nested within its templates"
		};
		b.e.I.template = m;
		b.b("setTemplateEngine", b.wa);
		b.b("renderTemplate", b.va);
		b.a.Ja = function(a, b, c) {
			a = a || [];
			b = b || [];
			return a.length <= b.length ? S(a, b, "added", "deleted", c) : S(b, a, "deleted", "added", c)
		};
		b.b("utils.compareArrays", b.a.Ja);
		b.a.$a = function(a, d, c, e, f) {
			function g(a, b) {
				t = l[b];
				w !== b && (z[a] = t);
				t.na(w++);
				M(t.M);
				s.push(t);
				A.push(t)
			}

			function h(a, c) {
				if (a) for (var d = 0, e = c.length; d < e; d++) c[d] && b.a.o(c[d].M,

				function(b) {
					a(b, d, c[d].U)
				})
			}
			d = d || [];
			e = e || {};
			var k = b.a.f.get(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult") === I,
				l = b.a.f.get(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult") || [],
				n = b.a.V(l, function(a) {
					return a.U
				}),
				q = b.a.Ja(n, d),
				s = [],
				v = 0,
				w = 0,
				B = [],
				A = [];
			d = [];
			for (var z = [], n = [], t, D = 0, C, E; C = q[D]; D++) switch (E = C.moved, C.status) {
				case "deleted":
					E === I && (t = l[v], t.j && t.j.B(), B.push.apply(B, M(t.M)), e.beforeRemove && (d[D] = t, A.push(t)));
					v++;
					break;
				case "retained":
					g(D, v++);
					break;
				case "added":
					E !== I ? g(D, E) : (t = {
						U: C.value,
						na: b.m(w++)
					}, s.push(t), A.push(t), k || (n[D] = t))
			}
			h(e.beforeMove, z);
			b.a.o(B, e.beforeRemove ? b.A : b.removeNode);
			for (var D = 0, k = b.e.firstChild(a), H; t = A[D]; D++) {
				t.M || b.a.extend(t, ha(a, c, t.U, f, t.na));
				for (v = 0; q = t.M[v]; k = q.nextSibling, H = q, v++) q !== k && b.e.Pa(a, q, H);
				!t.Ab && f && (f(t.U, t.M, t.na), t.Ab = m)
			}
			h(e.beforeRemove, d);
			h(e.afterMove, z);
			h(e.afterAdd, n);
			b.a.f.set(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult", s)
		};
		b.b("utils.setDomNodeChildrenFromArrayMapping", b.a.$a);
		b.C = function() {
			this.allowTemplateRewriting = r
		};
		b.C.prototype = new b.v;
		b.C.prototype.renderTemplateSource = function(a) {
			var d = !(9 > b.a.Z) && a.nodes ? a.nodes() : p;
			if (d) return b.a.L(d.cloneNode(m).childNodes);
			a = a.text();
			return b.a.ta(a)
		};
		b.C.oa = new b.C;
		b.wa(b.C.oa);
		b.b("nativeTemplateEngine", b.C);
		b.qa = function() {
			var a = this.Db = function() {
				if ("undefined" == typeof F || !F.tmpl) return 0;
				try {
					if (0 <= F.tmpl.tag.tmpl.open.toString().indexOf("__")) return 2
				} catch (a) {}
				return 1
			}();
			this.renderTemplateSource = function(b, c, e) {
				e = e || {};
				2 > a && j(Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later."));
				var f = b.data("precompiled");
				f || (f = b.text() || "", f = F.template(p, "{{ko_with $item.koBindingContext}}" + f + "{{/ko_with}}"), b.data("precompiled", f));
				b = [c.$data];
				c = F.extend({
					koBindingContext: c
				}, e.templateOptions);
				c = F.tmpl(f, b, c);
				c.appendTo(y.createElement("div"));
				F.fragments = {};
				return c
			};
			this.createJavaScriptEvaluatorBlock = function(a) {
				return "{{ko_code ((function() { return " + a + " })()) }}"
			};
			this.addTemplate = function(a, b) {
				y.write("<script type='text/html' id='" + a + "'>" + b + "\x3c/script>")
			};
			0 < a && (F.tmpl.tag.ko_code = {
				open: "__.push($1 || '');"
			}, F.tmpl.tag.ko_with = {
				open: "with($1) {",
				close: "} "
			})
		};
		b.qa.prototype = new b.v;
		w = new b.qa;
		0 < w.Db && b.wa(w);
		b.b("jqueryTmplTemplateEngine", b.qa)
	}
	"function" === typeof require && "object" === typeof exports && "object" === typeof module ? L(module.exports || exports) : "function" === typeof define && define.amd ? define(["exports"], L) : L(x.ko = {});
	m;
})();